

import {
    NetInfo
} from 'react-native';

import { toastLong } from './Toast';

const NOT_NETWORK = "网络不可用，请稍后再试";
const TAG_NETWORK_CHANGE = "NetworkChange";

/***
 * 检查网络链接状态
 * @param callback
 */
const checkNetworkState = (callback) => {
    NetInfo.isConnected.fetch().done( //检测网络是否连接
        (isConnected) => {
            callback(isConnected);
        }
    );
}

/***
 * 移除网络状态变化监听
 * @param tag
 * @param handler
 */
const removeEventListener = (tag, handler) => {
    NetInfo.isConnected.removeEventListener(tag, handler);
}

/***
 * 添加网络状态变化监听
 * @param tag
 * @param handler
 */
const addEventListener = (tag, handler) => {
    NetInfo.isConnected.addEventListener(tag, handler);
}
/**
*     ------- android 平台

  *NONE - 设备处于离线状态
  BLUETOOTH - 蓝牙数据连接
  DUMMY - 模拟数据连接
  ETHERNET - 以太网数据连接
  MOBILE - 移动网络数据连接
  MOBILE_DUN - 拨号移动网络数据连接
  MOBILE_HIPRI - 高优先级移动网络数据连接
  MOBILE_MMS - 彩信移动网络数据连接
  MOBILE_SUPL - 安全用户面定位（SUPL）数据连接
  VPN - 虚拟网络连接。需要Android5.0以上
  WIFI - WIFI数据连接
  WIMAX - WiMAX数据连接
  UNKNOWN - 未知数据连接

  ----------  ios 平台

  none - 设备处于离线状态。
  wifi - 设备处于联网状态且通过wifi链接，或者是一个iOS的模拟器。
  cell - 设备是通过Edge、3G、WiMax或是LTE网络联网的。
  unknown - 发生错误，网络状况不可知
*/
const addChangeEventListener = () => {
    try {
        NetInfo.isConnected.addEventListener('change', (connectionInfo) => {
            NetInfo.fetch().done(
                (connectionInfo) => {  //检查网络连接信息
                    switch (connectionInfo) {
                        case 'NONE':
                            toastLong("设备处于离线状态", 'bottom');
                            break;
                        case 'BLUETOOTH':
                            //  toastLong("蓝牙数据连接",'bottom');
                            break;
                        case 'DUMMY':
                            //  toastLong("模拟数据连接",'bottom');
                            break;
                        case 'ETHERNET':
                            toastLong("以太网数据连接", 'bottom');
                            break;
                        case 'MOBILE':
                            toastLong("移动网络数据连接", 'bottom');
                            break;
                        case 'WIFI':
                            toastLong("WIFI数据连接", 'bottom');
                            break;
                        case 'none':
                            toastLong("设备处于离线状态", 'bottom');
                            break;
                        case 'cell':
                            toastLong("蜂窝网络连接", 'bottom');
                            break;
                        case 'wifi':
                            toastLong("WIFI数据连接", 'bottom');
                            break;
                        case 'unknown':
                            toastLong("未知网络连接状态", 'bottom');
                            break;
                    }
                }
            );
        });
    } catch (e) {
        toastLong(e, 'bottom');
    }
}
export default {
    checkNetworkState,
    addEventListener,
    addChangeEventListener,
    removeEventListener,
    NOT_NETWORK,
    TAG_NETWORK_CHANGE
}
